class Solution {
public:
    typedef struct ListNode* Node;
    ListNode* reverseKGroup(ListNode* head, int k) {
        if(!head || !head->next) return head;
        // Node virnode=new ListNode(-1);
        // virnode->next=head;
        Node q=head;
        for(int i=0;i<k-1;i++)
        {
            if(!q->next) return head;
            q=q->next;
        }

        Node nexthead=q->next;
        q->next=nullptr;

        Node cur=head;
        Node pre=nullptr;
        while(cur)
        {
            Node temp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=temp;
        }

        head->next=reverseKGroup(nexthead,k);
        return pre;
    }
};
